<?php

declare(strict_types=1);

namespace app\common\controller;

use app\common\service\third_party_api\PayApiService;
use think\App;
use think\exception\ValidateException;
use think\response\Json;

/**
 * 支付回调控制器
 * 负责接收支付宝和微信支付的异步回调通知
 */
class PayCallback
{
    /**
     * 支付服务实例
     * @var PayApiService
     */
    protected $payApiService;

    /**
     * 应用实例
     * @var App
     */
    protected $app;

    /**
     * 构造函数
     * @param App $app 应用实例
     * @param PayApiService $payApiService 支付服务实例
     */
    public function __construct(App $app, PayApiService $payApiService)
    {
        $this->app = $app;
        $this->payApiService = $payApiService;
    }

    /**
     * 支付宝回调处理
     * @return Json
     */
    public function aliPayNotify()
    {
        try {
            // 调用支付服务中的支付宝回调处理方法
            $result = $this->payApiService->aliCallback();

            // 根据处理结果返回对应的响应
            if ($result) {
                return json('success');
            } else {
                return json('fail');
            }
        } catch (ValidateException $e) {
            // 记录异常日志
            $this->app->log->error('支付宝回调验证失败: ' . $e->getMessage());
            return json('fail');
        } catch (\Exception $e) {
            // 记录异常日志
            $this->app->log->error('支付宝回调处理异常: ' . $e->getMessage());
            return json('fail');
        }
    }

    /**
     * 微信支付回调处理
     * @return string
     */
    public function wxPayNotify()
    {
        try {
            // 调用支付服务中的微信回调处理方法
            $result = $this->payApiService->wxCallback();

            // 根据处理结果返回对应的响应
            if ($result) {
                return '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
            } else {
                return '<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[处理失败]]></return_msg></xml>';
            }
        } catch (ValidateException $e) {
            // 记录异常日志
            $this->app->log->error('微信回调验证失败: ' . $e->getMessage());
            return '<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[' . $e->getMessage() . ']]></return_msg></xml>';
        } catch (\Exception $e) {
            // 记录异常日志
            $this->app->log->error('微信回调处理异常: ' . $e->getMessage());
            return '<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[系统异常]]></return_msg></xml>';
        }
    }
}
